﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Ui.Web.Code;
using Ubatic.Contracts.Services;
using Ubatic.Common.Dto;
using Ubatic.Contracts.Contracts;
using Ubatic.Ui.Web.Classes;

namespace Ubatic.Ui.Web.Pages
{
    public partial class ProyectoMiembroEditar : BasePage
    {
        public ProyectoEquipo proyectoCurrent
        {
            get
            {
                return (ProyectoEquipo)ViewState["Proyecto"];
            }
            set
            {
                ViewState["Proyecto"] = value;
            }
        }

        public ProyectoMiembro proyectoMiembroCurrent
        {
            get
            {
                return (ProyectoMiembro)ViewState["ProyectoMiembro"];
            }
            set
            {
                ViewState["ProyectoMiembro"] = value;
            }
        }

        public bool SearchVisible
        {
            get
            {
                return (bool)ViewState["searchVisible"];
            }
            set
            {
                ViewState["searchVisible"] = value;
            }
        }

        ISecurityService SecurityService;
        IAdminProyectoService AdminProyectoService;
        Usuario usuario;        

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                SecurityService = ServiceFactory.GetSecurityService();
                AdminProyectoService = ServiceFactory.GetAdminProyectoService();
                usuario = SecurityService.GetUserByEmail(Context.User.Identity.Name);

                if (!this.IsPostBack)
                {                   
                    if (this.Request.QueryString["ProyectoId"] == null)
                    {
                        throw new Exception("ProyectoId no fue indicado");
                    }
                    else
                    {
                        proyectoCurrent = AdminProyectoService.GetProyectoEquipo(new ServiceOptions(), Convert.ToInt32(this.Request.QueryString["ProyectoId"]));
                        if (this.Request.QueryString["Id"] == null)
                        {
                            proyectoMiembroCurrent = new ProyectoMiembro();
                            SearchVisible = true;
                        }
                        else
                        {
                            proyectoMiembroCurrent = AdminProyectoService.GetMiembroEquipo(new ServiceOptions(), Convert.ToInt32(this.Request.QueryString["Id"]));
                            SearchVisible = false;
                        }
                    }

                    FillCombos();
                    Bind();
                }                
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void Bind()
        {
            if (SearchVisible)
            {
                this.pnlSearchUser.Visible = true;
                this.pnlEdition.Visible = false;
            }
            else
            {
                this.pnlSearchUser.Visible = false;
                this.pnlEdition.Visible = true;

                this.txtEmail.Text = this.proyectoMiembroCurrent.Email;
                this.txtNombre.Text = this.proyectoMiembroCurrent.NombreYApellido;
                this.txtCUIL.Text = this.proyectoMiembroCurrent.CUIL;

                if(this.proyectoMiembroCurrent.Id != default(int))
                {
                    this.txtId.Text = this.proyectoMiembroCurrent.Id.ToString();

                    if (!String.IsNullOrEmpty(this.proyectoMiembroCurrent.CargoId))
                    {
                        this.cboCargo.SelectedValue = this.proyectoMiembroCurrent.CargoId;
                    }

                    if (!String.IsNullOrEmpty(this.proyectoMiembroCurrent.CargoDedicacionId))
                    {
                        this.cboCargoDedicacion.SelectedValue = this.proyectoMiembroCurrent.CargoDedicacionId;
                    }

                    if (this.proyectoMiembroCurrent.UnidadAcademicaId.HasValue)
                    {
                        this.cboUnidadAcademica.SelectedValue = this.proyectoMiembroCurrent.UnidadAcademicaId.Value.ToString();
                    }

                    if (this.proyectoMiembroCurrent.RolEnProyectoId.HasValue)
                    {
                        this.cboRolEnProyecto.SelectedValue = this.proyectoMiembroCurrent.RolEnProyectoId.Value.ToString();
                    }
                }
            }
        }

        private void Buscar()
        {
            ProyectoMiembro miembroProyectoSearched = AdminProyectoService.GetMiembroEquipoByEmail(new ServiceOptions(), this.proyectoCurrent.Id, this.txtEmailSearch.Text);
            if (miembroProyectoSearched == null)
            {
                SearchVisible = true;
                ShowMessage("Debe crear el usuario para poder agregarlo como miembro", WebMessageType.Notification);
            }
            else
            {
                SearchVisible = false;
                this.proyectoMiembroCurrent = miembroProyectoSearched;
                Bind();
            }
        }

        private void SetData()
        {
            if (!String.IsNullOrEmpty(this.txtId.Text))
            {
                this.txtId.Text = this.proyectoMiembroCurrent.Id.ToString();
            }

            this.proyectoMiembroCurrent.Email = this.txtEmail.Text;            
            this.proyectoMiembroCurrent.NombreYApellido = this.txtNombre.Text;
            this.proyectoMiembroCurrent.CUIL = this.txtCUIL.Text;
            this.proyectoMiembroCurrent.CargoId = UIHelper.GetStringFromInputCbo(this.cboCargo);
            this.proyectoMiembroCurrent.CargoDedicacionId = UIHelper.GetStringFromInputCbo(this.cboCargoDedicacion);
            this.proyectoMiembroCurrent.UnidadAcademicaId = UIHelper.GetIntFromInputCbo(this.cboUnidadAcademica);
            this.proyectoMiembroCurrent.RolEnProyectoId = UIHelper.GetIntFromInputCbo(this.cboRolEnProyecto);       
        }

        private void Save()
        {
            this.proyectoMiembroCurrent = AdminProyectoService.SaveProyectoMiembroEquipo(this.proyectoMiembroCurrent);
        }

        private void FillCombos()
        {           
            List<MaestroBase> unidadesAcademicas = AdminProyectoService.GetUnidadesAcademicas();
            UIHelper.LoadCbo(unidadesAcademicas, this.cboUnidadAcademica, "Sin unidad académica");
           
            List<MaestroBaseCargo> cargos = AdminProyectoService.GetCargos();
            UIHelper.LoadCbo(cargos, this.cboCargo, "Sin cargo");           

            List<MaestroBaseCargo> cargoDedicaciones = AdminProyectoService.GetCargoDedicaciones();
            UIHelper.LoadCbo(cargoDedicaciones, this.cboCargoDedicacion, "Sin dedicación");

            List<MaestroBase> rolEnProyecto = AdminProyectoService.GetRolEnProyecto();
            UIHelper.LoadCbo(rolEnProyecto, this.cboRolEnProyecto, "Sin rol");            
        }

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                SetData();
                Save();

                ShowMessage("Los datos fueron grabados con éxito", WebMessageType.Notification);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }      

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect(string.Format("/Pages/ProyectrosDetalleMiembrosEquipo.aspx?Id={0}", this.proyectoCurrent.Id), true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }       

        protected void lnkBuscar_Click(object sender, EventArgs e)
        {
            try
            {               
                Buscar();             
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }        
    }
}